吴宏东 - 记于2018年06月19日 - 博客 https://segmentfault.com/u/wu...

Linux 进程管理

进程概述

父子进程

PID:进程的唯一标识号;
systemd:系统启动后第一个进程,PID=1;
login:systemd进程会创建login进程,所以,systemd是login的父进程,反之login是systemd的子进程;
shell:shell(默认是bash)是login进程创建的,其后用户的所有进程都由该进程派生创建;

进程标识

RUID:实际用户识别号;
RGID:实际组识别号;
EUID:有效用户识别号;
EGID:有效组识别号;
RUID和RGID的作用是识别正在运行此进程的用户和组;
如果程序没有设置SUID和SGID,那么EUID和EGID就是RUID和RGID,而RUID和RGID就是用户和组的UID和GID;

进程类型

交互进程:由shell启动的进程,可以前台或后台运行;
批处理进程:不与特定终端关联,加入后台的计划队列顺序处理;
守护进程:系统初始化后,需要运行于后台的进程;

查看进程

命令 ps -aux

[-a]:显示所有进程;
[-u]:显示用户名和启动时间等信息;
[-x]:显示没有控制终端的进程;
[-w]:显示完整命令行;

# 查找关于openshift的进程
ps -aux|grep openshift;
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 128020  6620 ?        Ss   10:33   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    10:33   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:33   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   10:33   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    10:33   0:01 [kworker/u256:0]

USER:用户名;
PID:进程号;
%CPU:占用CPU时间与总时间的百分比;
%MEM:占用内存与系统内存总量的百分比;
VSZ:占用虚拟内存空间,单位KB;
RSS:占用内存空间,单位KB;
TTY:从哪个终端启动;
STAT:进程当前状态;
START:开始执行时间;
TIME:自启动以来占用CPU的总时间;
COMMAND:启动命令名;

状态:R 执行中;S 睡眠;T 追踪或停止;Z 僵尸进程;< 高优先级;N 低优先级;

命令 pgrep

通过模糊匹配模式,查找进程的ID

# 查找关于openshift的进程ID
pgrep openshift;

命令 pidof

通过模糊匹配模式,查找进程的ID

# 查找关于openshift的进程ID
pidof openshift;

杀死进程

命令 kill

# 杀死指定PID为10086的进程
kill 10086;
# 强制杀死进程
kill -9 10086;
# 杀死进程名为openshift的进程
kill openshift;
kill -9 $(pgrep openshift);

命令 killall

# 杀死进程名为openshift的所有进程
killall openshift;

命令 pkill

# 杀死进程名为openshift的所有进程
pkill openshift;

作业进程

cmd &:表示后台执行;
nohup cmd &:表示后台执行,并且用户注销后仍然运行着;
<Ctrl+D>:正常终止一个前台运行的进程;
<Ctrl+C>:强行终止一个前台运行的进程;
<Ctrl+Z>:挂起一个正在前台运行的进程;
<Ctrl+S>:挂起终端;
<Ctrl+Q>:解除挂起终端;

命令 [cmd] &

# 终端休眠100秒,调度到后台运行
sleep 100 &;

命令 nohup [cmd] &

# 终端休眠100秒,调度到后台运行,且用户注销后仍然运行着
nohup sleep 100 &;

命令 jobs

# 查看正在运行的作业
jobs;
# 显示进程PID
jobs -l;
[root@master ~]# jobs -l
[1]+  1810 完成                  sleep 100

[1] 是作业序号;
1810 是进程PID;
sleep 100 是命令;

命令 fg %

# 将作业[1]调度到前台终端运行
fg %1;

命令 bg %

# 将作业[1]调度到后台终端运行
bg %1;

命令 kill %

# 将作业[1]进程杀死
kill %1;

吴宏东
25 声望4 粉丝

专注于Linux系统信息安全,精通渗透测试、安全审计、漏洞分析、反入侵技术。